Redundant arrays of inexpensive disks (RAIDs) provide for reliable storage of payload data by storing additional data in some of the disks of the array. The design of a RAID involves ensuring that, if some number of disks fails, then the data stored in those disks may be recovered from other disks in the array.
Some RAIDs apply codes to segments of payload data to create codewords on the disks of an array. In this manner, in the event of a failure, a RAID controller is able to recover the payload data from those codewords. Some codes are maximum-distance separable (MDS) in that such codes allow for recovery of up to r erasures when r parity disks have been set aside for parity data. An example of such an MDS code is a Reed-Solomon code with an alphabet based on GF(2m), where m is the length of a payload block.
Other codes, however, are non-MDS codes based on alphabets such as GF(2). In these codes, many mathematical operations on codewords may be carried out with XOR operations. In conventional RAID systems that use systematic, non-MDS codes, a storage processor stores parity data and payload data on separate disks and perform partial stripe updates of parity data independently from the payload data.